/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package cci;

import cdp.Marca;
import cdp.Produto;
import cgt.AplCadastrarCliente;
import cgt.AplCadastrarProduto;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author Rodrigo
 */
public class CtrlProduto extends HttpServlet {

    String janela;
    String opcao = "novo";
    
    /*Atributos comuns*/
    long id; //id do item atual
    String nome;
    
    /*Atributos Marca*/
    Marca marca = new Marca();
    String eMail;
    
    /*Atributos Produto*/
    Produto produto = new Produto();
    long idMarca; //id da marca do produto
    List<Marca> listaMarcas; //lista de objetos marca
    int quantidade;
    double preco; 
    
    AplCadastrarProduto apl = AplCadastrarProduto.getInstance();
    
    private void setParametros(HttpServletRequest request, HttpServletResponse response)
    {
        janela = request.getParameter("janela");
        
        if(janela.equals("EventosMarca") || janela.equals("EventosProduto")){
            if (request.getParameter("alterar") != null) {
                opcao = "alterar";
            }
            else if(request.getParameter("excluir") != null){
                opcao = "excluir";
            }
            else if(request.getParameter("opcao") != null){
                opcao = "novo";
            }
        }
        else{
            opcao = request.getParameter("opcao");
        }
        
        request.setAttribute("opcao", opcao);
    }
    
    private void setParametrosMarca(HttpServletRequest request, HttpServletResponse response)
    {
        id = Long.parseLong(request.getParameter("idAtual"));
        
        marca = apl.consultar(marca, id);
        
        nome = marca.getNome();
        eMail = marca.geteMail();
    }
    
    private void setAtributosMarca(HttpServletRequest request, HttpServletResponse response){
        request.setAttribute("id", id);
        request.setAttribute("nome", nome);
        request.setAttribute("eMail", eMail);
    }
    
    private void salvarMarca(HttpServletRequest request, HttpServletResponse response){
        List<Object> lista = new ArrayList<Object>();
        
        nome = request.getParameter("nome");
        eMail = request.getParameter("eMail");
        
        lista.add(nome);
        lista.add(eMail);
        
        if (opcao.equals("novo")) {
            apl.incluirMarca(lista);
        }
        else{
            lista.add(id);
            apl.alterarMarca(lista);
        }
    }
    
    private void excluirMarca(HttpServletRequest request, HttpServletResponse response){
        marca = apl.consultar(marca, id);
        apl.excluir(marca);
    }
    
    private void setParametrosProduto(HttpServletRequest request, HttpServletResponse response)
    {
        id = Long.parseLong(request.getParameter("idAtual"));
        
        produto = apl.consultar(produto, id);
        
        idMarca = produto.getMarca().getId();
        nome = produto.getNome();
        quantidade = produto.getQuantidade();
        preco = produto.getPreco();
    }
    
    private void setAtributosProduto(HttpServletRequest request, HttpServletResponse response){
        /*Criando lista com todas as Marcas*/
        listaMarcas = apl.consultarTodos(marca);
        
        request.setAttribute("listaMarcas", listaMarcas);
        
        if (opcao.equals("alterar")) {
            request.setAttribute("opcao", opcao);
            request.setAttribute("id", id);
            request.setAttribute("idMarca", idMarca);
            request.setAttribute("nome", nome);
            request.setAttribute("quantidade", quantidade);
            request.setAttribute("preco", preco);
        }
    }
    
    private void salvarProduto(HttpServletRequest request, HttpServletResponse response){
        List<Object> lista = new ArrayList<Object>();
        
        idMarca = Long.parseLong(request.getParameter("idMarca"));
        nome = request.getParameter("nome");
        quantidade = Integer.parseInt(request.getParameter("quantidade"));
        preco = Double.parseDouble(request.getParameter("preco"));
        
        lista.add(idMarca);
        lista.add(nome);
        lista.add(quantidade);
        lista.add(preco);
        
        if (opcao.equals("novo")) {
            apl.incluirProduto(lista);
        }
        else{
            lista.add(id);
            apl.alterarProduto(lista);
        }
    }
    
    private void excluirProduto(HttpServletRequest request, HttpServletResponse response){
        produto = apl.consultar(produto, id);
        apl.excluir(produto);
    }
    
    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String url = "/";
        RequestDispatcher dispatcher = null;
        
        setParametros(request, response);
        
        if(janela.equals("EventosMarca")){
            
            url = "cih/PagFormMarca.jsp";
            
            if(opcao.equals("novo")){
              dispatcher = request.getRequestDispatcher(url);
              dispatcher.forward(request, response);
            }
            if(opcao.equals("alterar")){ 
                setParametrosMarca(request, response);
                setAtributosMarca(request, response);
                dispatcher = request.getRequestDispatcher(url);
                dispatcher.forward(request, response);
            }
            if(opcao.equals("excluir")){
                setParametrosMarca(request, response);
                excluirMarca(request, response);
                response.sendRedirect("cih/PagEventosMarca.jsp");
            }
        }
        
        if(janela.equals("FormMarca")){   
            salvarMarca(request, response); 
            response.sendRedirect("cih/PagEventosMarca.jsp");
        }
        
        if(janela.equals("EventosProduto")) {
            
            url = "cih/PagFormProduto.jsp";
            
            if(opcao.equals("novo")){
                setAtributosProduto(request, response);
                dispatcher = request.getRequestDispatcher(url);
                dispatcher.forward(request, response);
            }
            if(opcao.equals("alterar")){
                setParametrosProduto(request, response);
                setAtributosProduto(request, response);
                dispatcher = request.getRequestDispatcher(url);
                dispatcher.forward(request, response);
            }
            if(opcao.equals("excluir")){
                setParametrosProduto(request, response);
                excluirProduto(request, response);
                response.sendRedirect("cih/PagEventosProduto.jsp");
            }
        }
        
        if(janela.equals("FormProduto")){
            salvarProduto(request, response); 
            response.sendRedirect("cih/PagEventosProduto.jsp");
        }
       
        //processRequest(request, response);
    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}
